package com.ccys.db.vo.app.callStandByScreen;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * @program: WhiteCoat
 * @description: 处方返回数据组装Vo
 * @author: ZhangJingCan
 * @create: 2024-01-22 14:33
 **/

@Data
public class PrescriptionMakeVo {

    //todo 猜测这里面的数据来源于tbl_booking_prescription表

    /**
     * 处方数量
     */
    private BigDecimal quantity;

    /**
     * 处方价格
     */
    private BigDecimal price;

    /**
     * 金额
     */
    private BigDecimal amount;

    /**
     * 路线医生名称
     * product_id 关联product表再关联下方的
     */
    @JsonProperty("route_doctor_name")
    private String routeDoctorName;//用rd_id关联tbl_formulation_route_doctor

    /**
     * 路线患者名称
     * product_id 关联product表再关联下方的
     */
    @JsonProperty("route_patient_name")
    private String routePatientName;//用rp_id关联tbl_formulation_route_patient

    /**
     * 医生开药每次服用数量
     */
    @JsonProperty("UOM_quantity")
    private String UOMQuantity;

    /**
     * 配方名称
     * product_id 关联product表再关联下方的
     */
    @JsonProperty("formulation_name")
    private String formulationName;//用flId关联tbl_formulation查询name

    /**
     * 单位 tbl_booking_prescription表的prescription_unit  也就是id，tbl_unit_of_measurement 的id
     */
    private String unit;

    /**
     * 单位名称
     */
    @JsonProperty("unit_name")
    private String unitName;

    /**
     * 用药频率？ tbl_booking_prescription表里面 下面从枚举取数据时的key就是这个字段
     */
    private String frequency;

    /**
     * 频率说明  PrescriptionFrequencyEnum枚举里面 //todo 后面出来之后取
     */
    @JsonProperty("frequency_description")
    private String frequencyDescription;

    /**
     * 期间？tbl_booking_prescription表里面 ,我们是integer类型，但是对方返回的是1.0带小数
     */
    private BigDecimal duration;

    /**
     * 持续时间单位 对方返回数字 1  tbl_booking_prescription表里面
     */
    @JsonProperty("duration_unit")
    private Integer durationUnit;

    /**
     * 持续时间单位名称 对方返回字符串："day(s)"
     * tbl_booking_prescription表里面的duration_unit值来判断给什么字符串
     */
    @JsonProperty("duration_unit_name")
    private String durationUnitName;

    /**
     * 单位剂型？ todo 保留字段名即可
     */
    @JsonProperty("unit_dosage_form")
    private String unitDosageForm;

    /**
     * 剂量 //todo 保留字段并且写死 值为 0
     */
    private Integer dosage = 0;

    /**
     * 剂量文本 todo 保留字段并且写死
     */
    @JsonProperty("dosage_text")
    private String dosageText = "DOSAGE";

    /**
     * tbl_booking_prescription 表的 quantity_fulfilled
     */
    @JsonProperty("quantity_fullfilled")
    private BigDecimal quantityFullfilled;

    /**
     * 类型,根据product表里面的type_id关联到product_type表，然后ifnull(type表的id,1)如果type存在则取type表的id，不存在设置为1
     */
    private Integer type;

    /**
     * 第三方产品ID
     */
    @JsonProperty("third_party_product_id")
    private String thirdPartyProductId;

    /**
     * 是否在应用程序显示价格
     */
    @JsonProperty("is_show_price_on_app")
    private Boolean isShowPriceOnApp;

    /**
     * product_id
     */
    private String id;

    /**
     * product表的name
     */
    private String name;

    /**
     * 处方成分？ todo 返回的空字符串
     */
    @JsonProperty("ingredient_only")
    private String ingredientOnly;

    /**
     * todo 对方返回："VT Supplies 1 - default AOP"
     */
    @JsonProperty("name_only")
    private String nameOnly;

    /**
     * 预约孩子的ID,booking表的childId
     */
    @JsonProperty("booking_child_id")
    private String bookingChildId;

    /**
     * 对患者的指导 tbl_booking_prescription 表
     */
    @JsonProperty("patient_instruction")
    private String patientInstruction;

    /**
     * 用药指导
     */
    @JsonProperty("pharmacist_instruction")
    private String pharmacistInstruction;

    /**
     * todo 写死数字0
     */
    private Integer refill = 0;

    /**
     * 再次补充药物日期？ todo 写死为空字符串
     */
    @JsonProperty("refill_expiry_date")
    private String refillExpiryDate = "";

    /**
     *  tbl_booking_prescription 表里面有
     */
    @JsonProperty("what_is_for")
    private String whatIsFor;

    /**
     * 是否引起嗜睡 tbl_booking_prescription 表里面有
     */
    @JsonProperty("causes_drowsiness")
    private Boolean causesDrowsiness;

    /**
     * 注意事项 tbl_booking_prescription 表里面有
     */
    @JsonProperty("any_precautions")
    private String anyPrecautions;

    /**
     * 建议用量 product表里面
     */
    @JsonProperty("recommended_dosage")
    private String recommendedDosage;

    /**
     * 推荐用药频率 product表里面
     */
    @JsonProperty("recommended_frequency")
    private String recommendedFrequency;

    /**
     * 推荐的表？ 写死空字符串
     */
    @JsonProperty("recommended_no_of_tables")
    private String recommendedNoOfTables = "";

    /**
     * product表里面
     */
    private String remarks;

    /**
     * 是否完成课程 tbl_booking_prescription表
     */
    @JsonProperty("take_complete_course")
    private Boolean takeCompleteCourse;

    /**
     * 每片剂量 写死 0.0
     */
    @JsonProperty("per_tablet_dosage")
    private BigDecimal perTabletDosage = new BigDecimal("0.0");

    /**
     * 药房ID tbl_booking_prescription表
     */
    @JsonProperty("pharmacy_id")
    private String pharmacyId;

    /**
     * 药房名称 通过tbl_booking_prescription表的pharmacy_id关联tbl_pharmacy表取name
     */
    @JsonProperty("pharmacy_name")
    private String pharmacyName;

    /**
     * tbl_booking_prescription表
     */
    private Boolean prn;

    /**
     * tbl_booking_prescription表
     */
    @JsonProperty("prn_reason")
    private String prnReason;

    /**
     * 状态 - tbl_booking_prescription表的status的状态值对应的字符串
     * case t1.status
     *                 when 0 then 'Non Selected'
     *                 when 1 then 'Pending'
     *                 when 2 then 'Paid'
     *                 when 3 then 'Delivered'
     *             end as status,
     */
    private String status;

    /**
     * 状态数字值 tbl_booking_prescription表的status的状态值
     */
    @JsonProperty("status_value")
    private Integer statusValue;

    /**
     * 第一次结算是否选择 tbl_booking_prescription表
     */
    private Boolean selected;

    /**
     * 是否在排除列表中？ tbl_booking_prescription表
     */
    @JsonProperty("is_in_exclusion_list")
    private Boolean isInExclusionList;

    /**
     * 是否是合作伙伴？ product表 partner
     */
    @JsonProperty("is_partner")
    private Boolean isPartner;

    /**
     * 国家ID product表
     */
    @JsonProperty("country_id")
    private String countryId;

    /**
     * 是否受控？ tbl_booking_prescription表 controlled
     */
    @JsonProperty("is_controlled")
    private String isControlled;

    /**
     * 在代码中组装 - 和这一层差不多字段，从这一层取
     */
    @JsonProperty("step_dose_medications")
    private List<StepDoseMedicationsMakeVo> stepDoseMedications;

    /**
     * tbl_booking_prescription表
     * 这一层仅仅只是为了取出来组装数据 比如AND THEN
     */
    @JsonProperty("step_dose")
    private String stepDose;

    /**
     * 用于在代码中排序的，一个booking可能开的药有多个流程，比如AND THEN等等
     */
    private Integer indexOrder;


    /**
     * 处方是否显示？
     */
    @JsonProperty("prescription_is_show")
    private Boolean prescriptionIsShow;

    /**
     * product_id
     */
    @JsonProperty("product_id")
    private String productId;

    /**
     * product表的name
     */
    @JsonProperty("product_name")
    private String productName;

    /**
     * product表的price
     */
    @JsonProperty("product_price")
    private BigDecimal productPrice;

    /**
     * 是否是慢性疾病？
     */
    @JsonProperty("is_chronic")
    private Boolean isChronic;

    /**
     * 备注
     */
    private String remark;

    /**
     * 是否涵盖诊断？
     */
    @JsonProperty("is_covered_diagnosis")
    private Boolean isCoveredDiagnosis;

    /**
     * 涵盖诊断的正则表达式
     */
    @JsonProperty("covered_diagnosis_regex")
    private String coveredDiagnosisRegex;

    /**
     * 处方是否在排除列表中？
     */
    @JsonProperty("prescription_is_in_exclusion_list")
    private Integer prescriptionIsInExclusionList;

    /**
     * 涵盖诊断代码
     */
    @JsonProperty("covered_diagnosis_code")
    private String coveredDiagnosisCode;

}
